import plotly.graph_objects as go
from nicegui import ui

# 初始化存储 3D 坐标的列表
x_coords = []
y_coords = []
z_coords = []

# 创建 3D 散点图
fig = go.Figure(data=[go.Scatter3d(x=x_coords, y=y_coords, z=z_coords, mode='markers')])

# 在 NiceGUI 中嵌入 Plotly 图表
plot = ui.plotly(fig)

# 创建文本框用于输入坐标
x_input = ui.input(label='X 坐标').classes('w-1/4')
y_input = ui.input(label='Y 坐标').classes('w-1/4')
z_input = ui.input(label='Z 坐标').classes('w-1/4')



def add_point():
    global x_coords, y_coords, z_coords
    try:
        x = float(x_input.value)
        y = float(y_input.value)
        z = float(z_input.value)
        x_coords.append(x)
        y_coords.append(y)
        z_coords.append(z)
        # 更新图表数据
        fig.data[0].x = x_coords
        fig.data[0].y = y_coords
        fig.data[0].z = z_coords
        plot.update()
    except ValueError:
        ui.notify('请输入有效的数字！')



def delete_point():
    global x_coords, y_coords, z_coords
    if x_coords:
        x_coords.pop()
        y_coords.pop()
        z_coords.pop()
        # 更新图表数据
        fig.data[0].x = x_coords
        fig.data[0].y = y_coords
        fig.data[0].z = z_coords
        plot.update()


# 创建增加和删除按钮
add_button = ui.button('增加', on_click=add_point).classes('w-1/4')
delete_button = ui.button('删除', on_click=delete_point).classes('w-1/4')

# 运行 NiceGUI 应用
ui.run()